1. Field of the Invention
The present invention relates generally to deploying applications, and in particular, to a method, apparatus, and article of manufacture for reducing/compressing the space needed for an application deployment.
2. Description of the Related Art
Applications and/or suites of applications are commonly delivered/deployed to clients on disc (e.g., compact discs [CDs] or digital video discs [DVDs]), universal serial bus (USB) flash drives, or transmitted across a network (e.g., the Internet). As these applications and application suites become more complex, the size of the deployment can be problematic (e.g., consuming multiple CDs/DVDs/USB flash drives or taking excessive amounts of time to download/transfer across a network). Prior art solutions have attempted to compress the application data in accordance with traditional lossless compression techniques (e.g., Lempel-Ziv [LZ] compression, DEFLATE™, run-length encoding [RLE], etc.). However, such compression techniques have failed to minimize and/or substantially reduce the deployment size. Accordingly, what is needed is a system and method that reduces the deployment size of an application/application suite efficiently and quickly. To better understand the problems of the prior art, a description of prior art deployment systems may be useful.
Many applications are not only large but are sold as part of a suite or package of applications. In the past, applications and suites were sold on floppy discs. As the size of the applications grew, the number of required floppy discs grew as well. Similar problems result when deploying applications on CDs or DVDs. While CDs and DVDs are commonly used, vendors may also utilize a USB drive for distribution. However, USBs have a higher cost compared to DVDs. Further, the price of a USB increases exponentially with the size. In addition, with the increased use of the Internet, rather than deploying an application/application suite on a physical media (e.g., CD/DVD/USB), applications and suites may be deployed via electronic delivery (e.g., across the Internet). In such deployments, the download time can be prohibitively long. Accordingly, a substantial value and benefit exists if more data can be stored on a drive/media of a fixed size and/or if the size of the application/application suite can be substantially reduced.
To increase the storage capacity of a fixed size drive, prior art solutions have attempted compression. Such compression attempts to compress large suites onto a smaller drive providing the user with the same experience yet lowering the cost of the goods/media. To maximize compression, the application may need to be developed (from the very beginning of the product's evolution) while taking size considerations into account. In this regard, to reduce the deployment size, applications can be engineered with size reduction as a goal. However, with very large (multiple GB and thousands of files) applications created over many years, size reduction can be an impossible effort. To enable such size reduction, development teams need to manually map out all of the potentially redundant files across the application and create installers that copy the files into the correct locations such that if two separate sub-components (part of an application) share a common module they will only be in the deployment package once. Such a process is time consuming and creates problems when one of the sub-components wants to update the common module. Accordingly, the use of a shared module creates undesirable dependences on the two application sub-components. When manually optimizing for size, these undesirable dependences are created. When applications have thousands of sub-components and when suites of applications are collected together, the testing interdependency makes the manually optimization process impossible. Accordingly, with legacy products (i.e., earlier versions of a product, products that are no longer supported by a vendor, and/or products that are configured to operate on obsolete or old hardware), such development from early in a product's evolution is not possible. Nonetheless, it is still desirable to reduce the size of such legacy products/suites without having to redesign the product itself. Embodiments of the present invention achieves an optimized version of manual size reduction through an automated process with no additional work from the development team and without adding any unwanted dependencies between sub-components.
In addition to the above, installation tools may be used across multiple products/product suites including legacy products. It is desirable to retain the structure of the installation tools (i.e., without modifying the installation tools) while still reducing the distribution size.
In many application deployments, although not recognized in much of the prior art, multiple instances of identical files may be used (e.g., the same files are on the application deployment several times). While the repeated use of the identical files may appear with single applications, such a repeated use is exacerbated with product suites. It is desirable to remove all of the identical files to decrease the consumption of space. However, with suites, it is difficult to remove all of the identical files because each of the applications in the suite may be deployed individually itself and in suites. In addition, due to dependencies on each instance of a file, the removal of an identical file can increase the components' dependencies.
Accordingly, having a file multiple times on an application deployment is a convenience for a product development team. Removing the identical files across a suite of products (e.g., across all Autodesk™ products, the assignee of the present application) could potentially take years of work and editing of the products themselves. Further, removing one-hundred percent (100%) of the redundant files by hand is not practical.
In view of the above, it is desirable to provide the capability to remove all instances of identical files from an application deployment (thereby reducing the size of the deployment) while enabling the installation of multiple copies of the files at a destination computer without modifying the installer.